let path = require('path')

let HtmlWebpackPlugins = require('html-webpack-plugin')

// 1> cleanWebpackPlugin
let {CleanWebpackPlugin} = require('clean-webpack-plugin')
// 2> copyWebpackPlugin
let CopyWebpackPlugin = require('copy-webpack-plugin')
// 3> bannerPlugin

let webpack = require('webpack')

module.exports = {
    // mode:'production',// development  production
    entry:'./src/index.js',
    output:{
        filename:'index.js',
        path:path.resolve(__dirname,'dist')
    },
    plugins:[
        // new webpack.DefinePlugin({
        //     Dev:JSON.stringify('production')
        // }),
        new HtmlWebpackPlugins({
            template:'./src/index.html',
            filename:'index.html'
        }),
        new CopyWebpackPlugin({
            patterns: [
                { from: './doc', to: './' }
              ],
        }),
        new CleanWebpackPlugin({
            verbose: true
        }),
        new webpack.BannerPlugin('make 2020')
    ],
    // devtool:'source-map',// 增加映射文件，调试源代码  出错调试工具
    // 不会产生单独的文件 显示行和列
    // devtool:'eval-source-map',
    // 不会产生列，但是是一个单独的映射文件
    // devtool:'cheap-module-source-map',
    // 不会产生文件  集成在文件中
    // devtool:'cheap-module-eval-source-map',
    watch: true,
    watchOptions: {
        poll:1000,// 每秒 1000次，
        aggregateTimeout:500, // 防抖  不能每更改都打包
        ignored:/node_modules/
    },
    resolve:{
        modules:[path.resolve('node_modules')],
        mainFields:['style','main'], // 查询依赖的package.json的配置信息
        extensions:['.js','.css','.json'] //加扩展名称
        // alias:{
        //     bootstrap:'bootstrap/dist/css/bootstrap.css'  // 路径简化
        // }
    },
    devServer:{
        // proxy:{
        //     // '/api':'http://localhost:3000'
        //     '/api':{
        //         target:'http://localhost:3000',
        //         pathRewrite:{'/api':''}
        //     }
        // }
        // 模拟数据
        // before(app){
        //     app.get('/api/user',(req,res)=>{
        //         res.json({
        //             name:'spf-before'
        //         })
        //     })
        // }
    },
    module:{
        rules:[
            {
                test:/\.js$/,
                use:{
                    loader:'babel-loader',
                    options:{
                        presets:['@babel/preset-env']
                    }
                }
            },
            {
                test:/\.css$/,
                use:['style-loader','css-loader']
            }
        ]
    }
}
